import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class Solution {
    //  先遍历数组2找到每个元素的前一个更大的元素
    private static Map<Integer,Integer> helper(int[] nums){
        Map<Integer,Integer> map=new HashMap<>();
        Stack<Integer> stack=new Stack<>();

        for(int i=0;i<nums.length;i++){
            //一直循环往后找，直到找到更大的第一个元素，大于则出栈
            while(!stack.isEmpty()&&nums[i]>stack.peek()){
                map.put(stack.pop(),nums[i]);
            }
            //将遍历到的元素压入栈
            stack.push(nums[i]);
        }
        //剩下的元素则全部赋予-1
        while(!stack.isEmpty()){
            map.put(stack.pop(),-1);
        }
        return map;
    }
    //
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {

        int[] result=new int[nums1.length];
        Map<Integer,Integer> map=helper(nums2);
        for(int i=0;i<nums1.length;i++){

            result[i]=map.get(nums1[i]);

        }
        return result;
    }
}